<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2023 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>D Language and ABI (GNU Compiler Collection (GCC) Internals)</title>

<meta name="description" content="D Language and ABI (GNU Compiler Collection (GCC) Internals)">
<meta name="keywords" content="D Language and ABI (GNU Compiler Collection (GCC) Internals)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Target-Macros.html#Target-Macros" rel="up" title="Target Macros">
<link href="Named-Address-Spaces.html#Named-Address-Spaces" rel="next" title="Named Address Spaces">
<link href="C_002b_002b-ABI.html#C_002b_002b-ABI" rel="prev" title="C++ ABI">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en">
<a name="D-Language-and-ABI"></a>
<div class="header">
<p>
Next: <a href="Named-Address-Spaces.html#Named-Address-Spaces" accesskey="n" rel="next">Named Address Spaces</a>, Previous: <a href="C_002b_002b-ABI.html#C_002b_002b-ABI" accesskey="p" rel="prev">C++ ABI</a>, Up: <a href="Target-Macros.html#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="D-ABI-parameters"></a>
<h3 class="section">18.29 D ABI parameters</h3>
<a name="index-parameters_002c-d-abi"></a>

<dl>
<dt><a name="index-TARGET_005fD_005fCPU_005fVERSIONS"></a>D Target Hook: <em>void</em> <strong>TARGET_D_CPU_VERSIONS</strong> <em>(void)</em></dt>
<dd><p>Declare all environmental version identifiers relating to the target CPU
using the function <code>builtin_version</code>, which takes a string representing
the name of the version.  Version identifiers predefined by this hook apply
to all modules that are being compiled and imported.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fD_005fOS_005fVERSIONS"></a>D Target Hook: <em>void</em> <strong>TARGET_D_OS_VERSIONS</strong> <em>(void)</em></dt>
<dd><p>Similarly to <code>TARGET_D_CPU_VERSIONS</code>, but is used for versions
relating to the target operating system.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fD_005fREGISTER_005fCPU_005fTARGET_005fINFO"></a>D Target Hook: <em>void</em> <strong>TARGET_D_REGISTER_CPU_TARGET_INFO</strong> <em>(void)</em></dt>
<dd><p>Register all target information keys relating to the target CPU using the
function <code>d_add_target_info_handlers</code>, which takes a
&lsquo;<samp>struct d_target_info_spec</samp>&rsquo; (defined in <samp>d/d-target.h</samp>).  The keys
added by this hook are made available at compile time by the
<code>__traits(getTargetInfo)</code> extension, the result is an expression
describing the requested target information.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fD_005fREGISTER_005fOS_005fTARGET_005fINFO"></a>D Target Hook: <em>void</em> <strong>TARGET_D_REGISTER_OS_TARGET_INFO</strong> <em>(void)</em></dt>
<dd><p>Same as <code>TARGET_D_CPU_TARGET_INFO</code>, but is used for keys relating to
the target operating system.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fD_005fMINFO_005fSECTION"></a>D Target Hook: <em>const char *</em> <strong>TARGET_D_MINFO_SECTION</strong></dt>
<dd><p>Contains the name of the section in which module info references should be
placed.  By default, the compiler puts all module info symbols in the
<code>&quot;minfo&quot;</code> section.  Define this macro to override the string if a
different section name should be used.  This section is expected to be
bracketed by two symbols <code>TARGET_D_MINFO_SECTION_START</code> and 
<code>TARGET_D_MINFO_SECTION_END</code> to indicate the start and end address of
the section, so that the runtime library can collect all modules for each
loaded shared library and executable.  Setting the value to <code>NULL</code>
disables the use of sections for storing module info altogether.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fD_005fMINFO_005fSECTION_005fSTART"></a>D Target Hook: <em>const char *</em> <strong>TARGET_D_MINFO_SECTION_START</strong></dt>
<dd><p>If <code>TARGET_D_MINFO_SECTION</code> is defined, then this must also be defined
as the name of the symbol indicating the start address of the module info
section
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fD_005fMINFO_005fSECTION_005fEND"></a>D Target Hook: <em>const char *</em> <strong>TARGET_D_MINFO_SECTION_END</strong></dt>
<dd><p>If <code>TARGET_D_MINFO_SECTION</code> is defined, then this must also be defined
as the name of the symbol indicating the end address of the module info
section
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fD_005fHAS_005fSTDCALL_005fCONVENTION"></a>D Target Hook: <em>bool</em> <strong>TARGET_D_HAS_STDCALL_CONVENTION</strong> <em>(unsigned int *<var>link_system</var>, unsigned int *<var>link_windows</var>)</em></dt>
<dd><p>Returns <code>true</code> if the target supports the stdcall calling convention.
The hook should also set <var>link_system</var> to <code>1</code> if the <code>stdcall</code>
attribute should be applied to functions with <code>extern(System)</code> linkage,
and <var>link_windows</var> to <code>1</code> to apply <code>stdcall</code> to functions with
<code>extern(Windows)</code> linkage.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fD_005fTEMPLATES_005fALWAYS_005fCOMDAT"></a>D Target Hook: <em>bool</em> <strong>TARGET_D_TEMPLATES_ALWAYS_COMDAT</strong></dt>
<dd><p>This flag is true if instantiated functions and variables are always COMDAT
if they have external linkage.  If this flag is false, then instantiated
decls will be emitted as weak symbols.  The default is <code>false</code>.
</p></dd></dl>

<hr>
<div class="header">
<p>
Next: <a href="Named-Address-Spaces.html#Named-Address-Spaces" accesskey="n" rel="next">Named Address Spaces</a>, Previous: <a href="C_002b_002b-ABI.html#C_002b_002b-ABI" accesskey="p" rel="prev">C++ ABI</a>, Up: <a href="Target-Macros.html#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
